AWS Tools for PowerShell Core を学びながら CloudFormation周りの補助スクリプトを作ってみる
Windows ユーザーの皆さん PowerShell使ってますか?
今回は AWS Tools for PowerShell を使ってみようと思います。
ちょうど CloudFormation(CFn)のスタック操作をマネジメントコンソールでポチポチすることが
多く そろそろCLIで実行したいな...
と思っていたので、 スタックの作成・更新周りの補助スクリプト を PowerShellで作ります。
目次
環境
実行環境は以下のとおり。
- OS: macOS Mojave (10.14.6)
- PowerShell: Core (6.2.1)
- AWS Tools for PowerShell: AWSPowerShell.NetCore (3.3.618.0)
インストール、セットアップ周りは割愛します (AWSのガイド を参照ください)。
コマンドレット
CFn 関連のコマンドレット一覧のドキュメントは こちら。
今回 CFn スタックの作成・更新周りのコマンドレットを一通り使ってみました。
(※ それぞれのパラメータ全ては紹介しません。詳細はドキュメント、もしくは Get-Help
参照)
- 確認: Get-CFNStack
- 確認: Get-CFNStackResourceList
- スタック作成: Test-CFNTemplate
- スタック作成: New-CFNStack
- スタック作成: Wait-CFNStack
- スタック更新: New-CFNChangeSet
- スタック更新: Get-CFNChangeSet
- スタック更新: Start-CFNChangeSet/ Remove-CFNChangeSet
確認: Get-CFNStack
作成しているスタック一覧を取得します。
確認: Get-CFNStackResourceList
スタック名を指定して、リソースの一覧を取得します。
デフォルトの出力は情報量が多いので、マネコン風に表示するための関数を作成すると良い感じです。
スタック作成: Test-CFNTemplate
CFnテンプレートの検証を行います。
ローカルの場合は -TemplateBody
、
S3バケット内の場合は -TemplateURL
パラメータを指定します。
-TemplateBody
の内容は Get-Content ./FILEPATH/FILE.yaml -Raw
のようにします。
-Raw
を付けないと型の不一致でエラーになります。
スタック作成: New-CFNStack
新規スタックを作成します。 主にスタック名、テンプレートファイル、パラメータを指定して実行します。使用例はこちら。
実行するとスタックIDが返されます。
スタック作成: Wait-CFNStack
スタックが作成されるのを待ちます。スクリプト作成時に役立ちます。
デフォルトで UPDATE_ROLLBACK_COMPLETE, CREATE_COMPLETE, ROLLBACK_COMPLETE, UPDATE_COMPLETE
のいずれかのステータスになるまで、 最大 60秒
待機します。
完成後は 作成したスタックの情報を返します。
ステータスとタイムアウトを指定するには -Status
、 -Timeout
パラメータを指定します。
PS C:\> Wait-CFNStack -StackName MyStack -Timeout 300 -Status CREATE_COMPLETE,ROLLBACK_COMPLETE
(引用: reference: Wait-CFNStack : Examples2)
スタック更新: New-CFNChangeSet
新規 ChangeSet(変更セット) を作成します。 以下はローカルの更新後テンプレートをパラメータに入れて変更セットを作成する例です。
スタック更新: Get-CFNChangeSet
変更セットの情報を取得します。
Changes
に変更点がまとめられているので、そちらを参照しましょう。
スタック更新: Start-CFNChangeSet/ Remove-CFNChangeSet
Get-CFNChangeSet
で得た変更内容を確認した後、
- OK であれば
Start-CFNChangeSet
で変更セットを実行してスタックを更新します - NG であれば
Remove-CFNChangeSet
で変更セットを削除しましょう
スクリプト作ってみた
PowerShellの力(Power)を付けるのも兼ねて、検証用環境のスタックを作成・更新するための補助スクリプト作ってみました。
スタック作成
ローカルのCFnテンプレートを引数に新規スタックを作成する関数を作成してみました。
対話式に スタック名
、 パラメータ
を指定します。
▼ 利用イメージ
スタック更新
続いてはスタックの更新です。 ローカルのCFnテンプレート、スタック名を引数に渡します。
▼利用イメージ
(aws cloudformation wait change-set-create-complete
に相当するコマンドレットが見つからなかったので、
その部分だけ AWS CLI使ってます…)
おわりに
AWS Tools for PowerShell Core を色々触ってみました。
今までは AWS CLI + ConvertFrom-Json
などで AWSリソースにアクセスしていて、それでも十分使えていました。
ですが、SDKを使うことで JSON をパースするひと手間が省けたり、補完機能がより充実したり… と、
得られるメリットが思った以上に多かったです。
PowerShellの オブジェクトをパイプラインで受け渡す 仕様は楽しいですね。 これからも使っていこうと思います。